/**
 * tabSlide
 * @authors Your Name (you@example.org)
 * @date    2014-11-03 10:13:31
 * @version $Id$
 */

try{

$(function(){
		/**
		 * tabSlide Code
		 */
	var tabSlide = function($this,option){
			/**
			 * 默认配置项
			 * @type {Object}
			 */
		var config = {
				tabslide_control_txt   : '.tabslide_control_txt',	 //控制层focus按钮
				tabslide_control_cur   : 'cur',						 //选中状态样式名称
				tabslide_control_left  : '.tabslide_control_left',	 //控制层 左滑动按钮
				tabslide_control_right : '.tabslide_control_right',  //控制层 右滑动按钮
				tabslide_content 	   : '.tabslide_content',		 //主内容显示区模型
				speed_time			   : 3000,			     		 //间隔时间控制器 1000 = 1s(秒)
				animate_time		   : 300 						 //滑动速度 (单位毫秒)
			},

			/**
			 * 私有工具类
			 * @type {Object}
			 */
			util = {
				//工具类私有config配置信息
				config : {},

				//计时缓存器
				timeCache : {},

				//工具类选择器集合
				node : {
					text : function(){return $this.find(util.config.tabslide_control_txt)},
					left : function(){return $this.find(util.config.tabslide_control_left)},
					right : function(){return $this.find(util.config.tabslide_control_right)},
					content : function(){return $this.find(util.config.tabslide_content)}
				},

				//绑定UI元素事件
				bindUI : function(){
						//圆点切换事件
					util.node.text().children().each(function(i){
						util.node.text().children().eq(0).addClass(util.config.tabslide_control_cur);
						$(this).click(function(){
							util.config.index = i;
							util.resetFocus();
							util.setAnimate();
						});
					});

					$this.hover(function() {
						/* 鼠标移入 */
						window.clearTimeout(util.timeCache[util.config.timeID]);
					}, function() {
						/* 鼠标移出 */
						util.autoAnimate();
					});

				},

				//重置控制区 小圆点focus样式
				resetFocus : function(){
					var textChild = util.node.text().children();
						textChild.removeClass(util.config.tabslide_control_cur);
					textChild.eq(util.config.index).addClass(util.config.tabslide_control_cur);
				},

				//重绘主内容显示区模型
				resetContent : function(){
					var child = util.node.content().children(),
						width = child.width() * child.length;
					util.node.content().css('width',width);
					util.config.length = child.length;
					util.config.width = child.width();
				},

				//自动滑动事件
				autoAnimate : function(){
					util.timeCache[util.config.timeID] = window.setTimeout(function(){
						util.config.index += 1;
						if(util.config.index >= util.config.length){
							util.config.index = 0;
						}
						util.setAnimate();
						util.resetFocus();
						util.autoAnimate();
					},util.config.speed_time);
				},

				//设置滑动
				setAnimate : function(){
					util.node.content().animate(
						{
							left:util.config.orient * util.config.width * util.config.index
						},
						util.config.animate_time
					);
				}

			},

			/**
			 * 初始化函数
			 * @return {[type]} [description]
			 */
			init = function(){
					//附加内部属性
				var util_config = {
						timeID : null,
						index  : 0, //当前显示索引
						width  : 0, //单个子模型宽度
						length : 0, //子模型总数量
						orient : -1 //方向控制 -1向左 1向右
					};
				util.config = $.extend(config,option);
				util.config = $.extend(util_config,util.config);
				util.config.timeID = 't' + new Date().getTime();
				util.config.index = 0;
				util.timeCache[util.config.timeID] = null;

				util.bindUI();
				util.resetContent();
				util.autoAnimate();
			};

		init();
	};

	/**
	 * 将函数扩展到jQuery插件上
	 * @param {Object} option [用户属性配置项]
	 */
	$.fn.tabSlide = function(option){
		this.each(function(){new tabSlide($(this),option);});
	};

});

}catch(ex){}